package HomeWork20241201;

import java.util.Scanner;
/*
 * 数值转大写的第二种方式
 * */
public class HomeWork1_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = getString(sc);
        getBigNum(str);
    }
    /**
     * 获取用户输入的整数
     *
     * @param sc Scanner对象
     * @return 返回用户输入的参数
     */
    public static String getString(Scanner sc) {
        String str = null;
        while (true) {
            System.out.println("请输入一个一万以内的整数:");
            str = sc.nextLine();
            if (!isNum(str)) {
                System.out.println("您输入的有误,请重新输入!");
            } else {
                break;
            }
        }
        return str;
    }

    /**
     * 将整数转换成中文
     *
     * @param str 获取用户输入的整数
     */
    public static void getBigNum(String str) {
        String[] bNum = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        String[] dW = {"", "拾", "佰", "仟"};

        StringBuilder stringBuilder = new StringBuilder();
        int length = str.length();
        boolean zeroFlag = false;

        for (int i = 0; i < length; i++) {
            int n = str.charAt(i) - '0';
            if (n != 0) {
                // 如果zeroFlag为true，且当前数字不是个位上的零，也不是零，说明该位数字前位的数字是零，所在需要在该数字前添加"零"
                if (zeroFlag && !stringBuilder.isEmpty() && !stringBuilder.toString().endsWith("零")) {
                    stringBuilder.append("零");
                }
                zeroFlag = false;
                // 将数字转换为大写
                stringBuilder.append(bNum[n]);
                // 获取单位
                stringBuilder.append(dW[length - i - 1]);
            } else {
                // 只有在不是首位时才添加"零"
                if (i > 0) {
                    zeroFlag = true;
                }
            }
        }

        stringBuilder.append("圆");
        // 将结果转换为字符串
        String result = stringBuilder.toString();

        System.out.println(result);
    }

    /**
     * 判断是否为整数
     *
     * @param str 待判断的字符串
     * @return true:是整数  false:不是整数
     */
    public static boolean isNum(String str) {
        return str.matches("\\d+") && str.length() <= 4;
    }
}
